package pe.gob.osce.sirenas.dao.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import pe.gob.osce.sirenas.dao.SolicitudInscripcionDAOLocal;
import pe.gob.osce.sirenas.model.SolicitudInscripcionDTO;
import pe.gob.osce.sirenas.model.jpa.SolicitudInscripcion;
import pe.gob.osce.sirenas.util.ConstanteEJB;
import pe.gob.osce.sirenas.util.ModeloException;

@Stateless
public class SolicitudInscripcionDAOImpl implements SolicitudInscripcionDAOLocal {

	@PersistenceContext(unitName="pe.gob.osce.sirenas.be.pu" )
	private	EntityManager	em;
	ResourceBundle propSirenas = ResourceBundle.getBundle(ConstanteEJB.PROPERTIES);
 
	@Override
	public SolicitudInscripcion insertar(SolicitudInscripcion solicitudInscripcion ) throws Exception {
		try{
			em.merge(solicitudInscripcion);
			em.flush();
		} catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_NO_INSERT), e);
		}
		return solicitudInscripcion;
	}
	
	@Override
	public List<SolicitudInscripcionDTO> obtieneListaSolicitud(SolicitudInscripcionDTO solicitudDTO) throws Exception {
		List<SolicitudInscripcionDTO> listaSolicitudes=new ArrayList<SolicitudInscripcionDTO>();
		try{
			StringBuilder  	jpql= new StringBuilder();
			
			jpql.append(" SELECT sol FROM SolicitudInscripcion sol WHERE sol.estado=1 ");
			if(solicitudDTO.getNumRuc()!=null && solicitudDTO.getNumRuc().trim().length()>0)
				jpql.append(" AND sol.numRuc = :numRuc");
			if(solicitudDTO.getNumDocumento()!=null && solicitudDTO.getNumDocumento().trim().length()>0)
				jpql.append(" AND sol.numDocumento = :numDocumento");
			
			Query	query= em.createQuery( jpql.toString() );

			if(solicitudDTO.getNumRuc()!=null && solicitudDTO.getNumRuc().trim().length()>0)
				query.setParameter("numRuc", Long.parseLong(solicitudDTO.getNumRuc()));
			if(solicitudDTO.getNumDocumento()!=null && solicitudDTO.getNumDocumento().trim().length()>0)
				query.setParameter("numDocumento", Long.parseLong(solicitudDTO.getNumDocumento()));
			
			listaSolicitudes=(ArrayList<SolicitudInscripcionDTO>)query.getResultList();			
			
		} catch (NoResultException nre) {
			return new ArrayList<SolicitudInscripcionDTO>();
		}catch (Exception e) {
			throw new ModeloException(propSirenas.getString(ConstanteEJB.EXC_MODELO_GENERAL_DB), e);
		}
		return listaSolicitudes;
	}
}
